1. Field of the Invention
The present invention relates to hardware software co-verification. More particularly, the present invention relates to using breakpoints in a debugging program to signify to a hardware software co-verification tool when to redirect hardware calls to a hardware simulator.
2. The Background Art
Embedded systems are by definition special purpose or customized devices controlled by a computer system through software application programs and hardware drivers which run on some form of operating system such as Windows CE from Microsoft Corporation of Redmond, Wash., Solaris 2.6 from Sun Microsystems of Mountain View, Calif., or VxWorks from Windriver of Alameda, Calif. Through software control these embedded systems are customized to provide a variety of features, forming a very broad market for these devices. For example, embedded systems include set-top boxes for cable, satellite, and Internet T.V. use, personal information managers, or any smart device created using a computer system such as a smart dishwasher. Specific examples of an embedded system are the 320LX.TM. hand-held PC from Hewlett Packard of Cupertino, Calif., the PILOT.RTM. personal information manager (PIM) from 3COM, the AutoPC from Volkswagen AG of Stuttgart, Germany, or any other device having a processor and peripheral hardware devices that run under software control.
FIG. 1 shows a typical process flow 10 for developing an embedded system. Process flow 10 is bifurcated into a software design flow 12 and hardware design flow 14, where both flows develop separately according to a common specification 15. The testing and verification of software 16, such as an application program 17a and/or hardware drivers 17b, do not occur until a suitable hardware prototype, such as through an ASIC, (Application Specific Integrated Circuit), is created at the hardware creation stage 18 (which is preceded by design hardware stage 19a and create simulation models and debug stage 19b). Waiting to test the software and hardware portions until a hardware prototype has been created extends the overall design cycle if re-work is required to make the software and hardware components compatible with each other.
One method known for detecting design flaws early in the process integrates the development of the software and hardware early in the development path by performing software debugging and verification before an actual working hardware prototype is completed. This approach provides the opportunity for a shorter time to market and higher product quality since testing may be accomplished through either a hardware or software solution (or both), and before any time and money is spent developing a physical implementation that may not be compatible with the software components developed.
This approach requires that the hardware product be emulated/simulated from design (behavioral and/or functional) models while the software product is also being simulated. One such testing apparatus is described in an International Application published under the Patent Cooperation Treaty (PCT) on behalf of inventor John Wilson, having an international publication number WO 95/26000, hereinafter referred to as the Wilson reference. In the Wilson reference, software code that is intended to interact with hardware, such as a software driver, is replaced with high level interface functions from an interface library during testing. However, replacing actual software code with high level interface functions does not accurately simulate the integration between the software and hardware components because replacing actual code with test code results in a program flow different from that if the actual code was actually used to interact with the hardware.
Accordingly, a need exists where hardware software co-verification is performed that accurately simulates the interaction between software code that interacts with the hardware device, such as a software driver, and a simulated hardware device without substituting the original software code with test code or without changing the execution flow of the original software code.